Cortex-M3 和 NVIC 在硬體架構上支援(Nested Interrupt)巢狀中斷。
因此我們並不需要額外寫組合語言來支援,我們只需設定好每個 Exception 的 priority。
低優先權的pending excptions,無需重複例外的前置作業,以串接的方式等候服務。
高優先權的excptions ,只要能在前者轉換成active前抵達,就不需要以強佔的方是登場,此機制可以加速、並減少堆疊的使用。至於被插隊的低全中斷,NVIC將以Tail-chainging視之。
當 exception handler 結束時,需要 Exception Exit (中斷返回)來恢復系統狀態,透過link register ($lr) 設置為 EXE_RETURN之值,該值告訴 ARM 轉回被 Exception 前的狀態。
這張圖很清楚的說明exception return做了甚麼事。
Definitive Guide To the ARM Cortex-M3
手機裡的 ARM 處理器: 隱藏的精靈 Cortex-M